Load balancing is used widely in the data processing industry and several load balancing products are commercially available. A load balancer, which is sometimes referred to as a Server Load Balancer (SLB), is used typically in computer cluster environments. A load balancer functions to distribute traffic (e.g., Transmission Control Protocol (TCP) connections) according to a distribution policy (e.g. round robin) among a defined set of targets. Such a set of targets may be referred to as a “pool of targets.”
For example, when the traffic to be distributed consists of certain TCP connections, the pool of targets may consist of a set of processing units that each run a service (e.g., an HTTP server or FTP server), where each service is listening for incoming TCP connections on a certain port (e.g., port 80). In such a scenario, when the load balancer receives from a client a TCP connection request (i.e., TCP SYN packet), which connection request signals the start of a new TCP connection, the load balancer will select from the pool of targets a particular target to handle the new TCP connection. All packets received by the load balancer belonging to that TCP connection will be provided to the target that was selected to handle the connection. Thus, the load balancer may act as a gateway between clients, on the one hand, the pool of targets, on the other hand.
Load balancers are typically configured through a command-line interface, a graphical user interface, or a configuration protocol (e.g., a protocol based on the Network Configuration Protocol (NETCONF)). Adding a target to a pool of targets requires reconfiguration of the load balancer (e.g., it may requires updating a table that identifies each target in the pool of targets). This load balancer reconfiguration would typically be done by an operator manually through a command-line interface. Similarly, removing a target from a pool of targets would also require reconfiguration of the load balancer.
Existing Internet Protocol (IP) load balancers may be configured to monitor a pool of targets so that a target can be removed from the pool if the target is taken out of service. A common form of monitoring consists of periodically sending an echo request (e.g., an ICMP echo request) to each target in the pool of targets. This is commonly referred to as “pinging” the pool of targets. While pinging a target is easy to implement, it is not an accurate way to determine whether a target has been taken out of service. Additionally, existing IP load balancers typically use Network Address Translation (NAT) and/or Direct Server Return (DSR). It is well known to a person familiar with the art that DSR can only be used for load balancing inbound TCP traffic and that there are a multitude of undesirable side-effects when NAT is used, which side effects significantly limit the usefulness of NAT in some environments.
What is desired, therefore, are systems and methods for providing an improved load balancing system.